#include <iostream>
using namespace std;
//总结：声明
class A{
    public:
    A(int a =10):_a(a)
    {
        cout <<"A::_a = " <<_a << endl;
    }
    private:
        int _a;
};
class B{
    // 1.对象的每个成员都会走初始化，没用初始化也会走(声明赋值和初始化列表，最终值还是初始化)
    // 2.没用主动传参，有初始化的值就是初始化的值
    // 3.没有显示初始化
    // 自定义类型:调用它的默认构造函数，没有默认构造函数就会报错
    // 内置类型: 有缺省值就有缺省值，没有就是随机值
    public:
        B(int m = 0) : _m(10), _d(10), _aa(12){    //没有_aa(12)就是 _a = 10
        }
    void Print(){
        cout << _m << "---" << _d;
    }
    private:
        int _m ;       // 2.声明赋值 --> int _b = 6; 和初始化使用一个就行(同时使用还是初始化的赋值)
        const int _d;
        A _aa ;       // 自定义类型，没有初始化列表，就调用它的默认构造，没用默认构造就报错
};
int main(){
    B bb;
    bb.Print();

    cout << endl;

    B b;
    b.Print();

    return 0;
}